package dao

import (
	"time"
)

// 这是 Role 的全局公开dao对象，被service层调用!
var RoleDao = roleDao{}

// 角色表，常驻内存
// 这是 role表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Role struct {
	RoleId int32     `json:"role_id" form:"role_id" db:"role_id" v:"role_id"`
	Name   string    `json:"name" form:"name" db:"name" v:"name"`             // 角色名
	OpUser string    `json:"op_user" form:"op_user" db:"op_user" v:"op_user"` // 操作人
	Ctime  time.Time `json:"ctime" form:"ctime" db:"ctime" v:"ctime"`
	Mtime  time.Time `json:"mtime" form:"mtime" db:"mtime" v:"mtime"`
}

// 注意:这是 Role 的私有dao对象，只能在dao层内使用!
type roleDao struct {
	InsertTemplate func(arg Role) (int64, error)      //插入一条记录
	UpdateTemplate func(arg Role) (int64, error)      //更新一条记录
	DeleteTemplate func(id int64) (int64, error)      `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Role, error)       `arg:"id"` //根据传入的主键获取一条记录

	Find 		   func()([]RoleAuthority,error)
	FindRoles 	   func()([]Role,error)
	List           func(arg RoleList) ([]Role, error) //模糊分页查询
}

// 角色权限信息
type RoleAuthority struct {
	RoleId int    `json:"role_id"` //角色Id
	Aid    int    `json:"aid"`     //权限Id
	OpUser string `json:"op_user"` //操作人
	Ctime  string `json:"ctime"`
}

// 这是 role 表的批量请求参数
type RoleReq struct {
	List []Role `json:"list" form:"list"`
}

// 这是 roleDao.List()方法的请求参数
type RoleList struct {
	Page
}
